package ar.fiuba.tp7552.buildadmin.webactions.gastos;

import java.util.Collection;

import ar.fiuba.tp7552.buildadmin.model.builds.TipoPropiedad;
import ar.fiuba.tp7552.buildadmin.model.gastos.Prorrateo;
import ar.fiuba.tp7552.buildadmin.model.gastos.TipoGasto;
import ar.fiuba.tp7552.buildadmin.service.TipoGastoService;
import ar.fiuba.tp7552.buildadmin.webactions.BaseAction;

import com.opensymphony.xwork2.Preparable;

public class AsociacionAction extends BaseAction implements Preparable {
	
	private TipoGastoService tgastoService;
	
	private TipoGasto tipoGasto = new TipoGasto();
	private TipoPropiedad tipoProp = new TipoPropiedad();
	private Prorrateo prorrateo = new Prorrateo();
	private Double coeficiente;
	
	// ~~ Constructor ====================================================
	
	public AsociacionAction(TipoGastoService tgastoService) {
		super();
		this.tgastoService = tgastoService;
	}
	
	// ~~ Actions ========================================================
	@Override
	public void prepare() {
		if (prorrateo != null && prorrateo.getId() != null) {
			Long id = prorrateo.getId();
			prorrateo = tgastoService.getProrrateo(id);
			tipoProp = prorrateo.getTipoPropiedad();
			tipoGasto = prorrateo.getTipoGasto();
			coeficiente = prorrateo.getCoeficiente();
		} else if (tipoGasto != null && tipoGasto.getId() != null) {
			Long id = tipoGasto.getId();
			tipoGasto = tgastoService.get(id);
		}
	}
	
	public String asociar() {
		tgastoService.asociar(tipoGasto.getId(), tipoProp.getId(), coeficiente);
		return BaseAction.SUCCESS;
	}
	
	public String desasociar() {
		tgastoService.desasociar(tipoGasto.getId(), tipoProp.getId());
		return BaseAction.SUCCESS;
	}
	
	public String load() {
		
		return BaseAction.SUCCESS;
	}
	
	//~~ getters y setters ===========================================================
	public TipoGasto getTipoGasto() {
		return tipoGasto;
	}
	public void setTipoGasto(TipoGasto tipoGasto) {
		this.tipoGasto = tipoGasto;
	}
	public TipoPropiedad getTipoProp() {
		return tipoProp;
	}
	public void setTipoProp(TipoPropiedad tipoProp) {
		this.tipoProp = tipoProp;
	}
	public Prorrateo getProrrateo() {
		return prorrateo;
	}
	public void setProrrateo(Prorrateo prorrateo) {
		this.prorrateo = prorrateo;
	}
	public Double getCoeficiente() {
		return coeficiente;
	}
	public void setCoeficiente(Double coeficiente) {
		this.coeficiente = coeficiente;
	}
	public Collection<TipoPropiedad> getTipoProps() {
		return tgastoService.getAllTipoProps();
	}
}
